package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Name  string
	age   int
	Email string
}

func NewDefault() Person {
	return Person{
		Name: "A",
		age:  20,
	}
}

func main() {
	person := NewDefault()
	//获取元素信息
	elem := reflect.ValueOf(&person).Elem()
	//查询到元素信息中的指定数据,输出其内容
	fmt.Println(elem.FieldByName("age"))
	//查询指定字段并且赋值
	elem.FieldByName("Name").SetString("B")
	//此种方法不能修改私有变量数据,反射也绕不开安全机制
	//elem.FieldByName("age").SetInt(30)
	fmt.Println(person)
}
